Many software systems are split along functional boundaries into notional components. Diagnostic facilities in such a software system might not have awareness of these functional boundaries, or, if any such awareness exists, then the awareness is static, which requires maintenance as the product evolves. The drawbacks of maintaining a static awareness include the possibility of introducing defects and the creation of repeated development and test efforts. The absence of accurate componentization in a software system increases the time for the resolution of defects, and forces the collection of irrelevant information. Additionally, during rapid software development, there is scope for functional boundaries to change frequently. All of these factors contribute to making the composition of the functional components of software systems during, for example, the creation and the operation of such software systems either too complex to be carried out accurately or require a very significant workload to establish correctly.